import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        String str = "abcd";
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(str);
        for(int i =0; i<100; ++i) {
            stringBuilder.append(i);
        }
        System.out.println(stringBuilder);
    }
    public static void main5(String[] args) {
        // String 是不可变字符串，StringBuilder是可变字符串
        String str = "abcd";
        StringBuilder stringBuilder = new StringBuilder();
        for(int i =0; i<100; ++i) {
            stringBuilder.append(str);
            stringBuilder.append(i);
        }
        str = stringBuilder.toString();
        System.out.println(str);

        System.out.println("str 的哈希码: " + System.identityHashCode(str));
        str = str + "world";
        System.out.println("str 的哈希码: " + System.identityHashCode(str));

    }
    public static void main4(String[] args) {
        long start = System.currentTimeMillis();
        String str = "";
        for (int i = 0; i < 100; i++) {
            //str += i;
            str = str+i;
        }
        long end = System.currentTimeMillis();
        System.out.println(end  - start);
        System.out.println();
        System.out.println(str);
    }
    public static void main3(String[] args) {
        long start = System.currentTimeMillis();
        String s = "";
        for(int i =0; i < 10000; ++i) {
            s += i;
        }

        long end = System.currentTimeMillis();
        System.out.println(end  - start);


        // StringBuffer是线程安全的，StringBuilder是线程不安全的，所以在单线程的场景下，StringBuilder效率高
        start = System.currentTimeMillis();
        StringBuffer sbf = new StringBuffer("");
        for(int i =0; i < 100000; ++i) {
            sbf.append(i);
        }
        end = System.currentTimeMillis();
        System.out.println(end - start);

        start = System.currentTimeMillis();
        StringBuilder sbd = new StringBuilder();
        for(int i = 0; i < 100000; ++i){
            sbd.append(i);
        }
        end = System.currentTimeMillis();
        System.out.println(end - start);
    }
    public static void main2(String[] args) {
        String s2 = "abc";        // "abc" 在常量池中存在了，s2创建时直接用常量池中"abc"的引用
        char[] ch = new char[]{'a', 'b', 'c'};
        String s1 = new String(ch);     // s1对象并不在常量池中
        // 这个的返回值会被放入到常量池中
        s1.intern();                 // s1.intern()；调用之后，会将s1对象的引用放入到常量池中
        System.out.println(s1 == s2);


        String s3 = s1.intern();
        System.out.println(s3 == s2);
    }
    public static void main1(String[] args) {
//        String str = "hello world";
//        System.out.println(str.replaceAll("|","_"));
//        System.out.println(str.replaceFirst("|","_"));
//        System.out.println(str.replaceAll("\\|","_"));
//
//        String str2 = "hello world hello bit";
//        String[] res = str2.split(" ");
//        for(String e : res) {
//            System.out.println(e);
//        }
//
//        String[] str3 = str2.split(" ",2);
//        for(String e : str3) {
//            System.out.println(e);
//        }


        // String.split(String regex, int limit)
        // 如果limit > 0  最多被分割limit - 1 次
        // 1. 结果数组的长度不超过limit
        // 2. 如果分割的部分超过了limit，剩余的部分会作为最后一个元素保留

        // 如果limit == 0
        // 1. 字符串会尽可能的分割
        // 2. 结果数组丢弃末尾的空字符串

        // 如果limit < 0
        // 1. 字符串会尽可能的分割
        // 2. 结果数组会保留所有部分，包括结尾的空字符串
//        String[] str4 = str2.split(" ",3);
//        for(String e : str4) {
//            System.out.println(e);
//        }
//
//        System.out.println(str2.length());
//
//        String[] str5 = str2.split(" ",22);
//        for(String e : str5) {
//            System.out.println(e);
//        }

//        String str = "hello world hello bit  " ;
//        String[] res = str.split(" ",0);
//        for(String e : res) {
//            System.out.println("[" + e + "]");
//        }
//        System.out.println(res.length);
//
//        String[] res2 = str.split(" ",-1);
//        for(String e : res2) {
//            if (e.isEmpty()) {
//                System.out.println("[空字符串]"); // 明确标识空字符串
//            } else {
//                System.out.println("[" + e + "]");
//            }
//        }
//        System.out.println(res2.length);

//        String str = "192.168.1.1";
//        String[] res = str.split("\\.");
//        for(String e : res) {
//            System.out.println(e);
//        }

//        String str = "name=zhangsan&age=18" ;
//        String[] res = str.split("&");
//        for(int i =0; i<res.length; ++i) {
//            String[] tmp = res[i].split("=");
//            System.out.println(tmp[0]+" = "+tmp[1]);
//        }


//        String str = "helloworld";
//        System.out.println(str.substring(5));
//        System.out.println(str.substring(0,5));


        String str = "helloabc";
        System.out.println(str.contains("abc"));

        String str1 = "abcd";
        String str2 = "abcd";
        String str3 = new String("abcd");
        String str4 = new String("abcd");

        System.out.println(str1 == str2);
        System.out.println(str3 == str4);
    }
}
